package com.cino.demos.sourceCode.mybatisDemo.最贴切的类比demo;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Date;

/**
 * 🧠 超级大脑 - 智能管家的决策中心 (InvocationHandler)
 */
public class SmartBrain implements InvocationHandler {
    // 保存代理对象的引用
    private Object proxy;

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 保存代理对象引用，供其他方法使用
        this.proxy = proxy;

        System.out.println("📡 机器人收到指令，正在连接超级大脑...");

        // 处理基础方法 (toString, hashCode等)
        if (method.getDeclaringClass() == Object.class) {
            return handleBasicMethods(method, args);
        }

        // 分析具体指令
        String methodName = method.getName();
        System.out.println("🧠 大脑分析：主人要求执行 [" + methodName + "] 指令");

        // 根据不同指令执行不同操作
        switch (methodName) {
            case "pourWater":
                return executePourWater((String) args[0]);
            case "cookFood":
                return executeCookFood((String) args[0]);
            default:
                return "抱歉，我不懂这个指令";
        }
    }

    /**
     * 处理基础方法
     */
    private Object handleBasicMethods(Method method, Object[] args) {
        switch (method.getName()) {
            case "toString":
                return "我是智能管家机器人，由超级大脑控制！";
            case "hashCode":
                return System.identityHashCode(this);
            case "equals":
                return proxy == args[0];  // 现在可以正确访问proxy了
            default:
                try {
                    return method.invoke(this, args);
                } catch (Exception e) {
                    return "基础方法执行失败";
                }
        }
    }

    /**
     * 执行倒水指令
     */
    private String executePourWater(String temperature) {
        System.out.println("⏰ " + new Date());
        System.out.println("🔧 大脑决策：调用厨房模块倒" + temperature + "水");
        return "主人，这是您的" + temperature + "水！";
    }

    /**
     * 执行做饭指令
     */
    private String executeCookFood(String foodType) {
        System.out.println("⏰ " + new Date());
        System.out.println("🔧 大脑决策：调用厨房模块制作" + foodType);
        return "主人，美味的" + foodType + "做好了！";
    }
}